package com.kukudexin;

/**
 * @author: 酷酷的鑫
 * @Date: 2021/8/6 10:09
 * @description:
 */
public class Test07 {
    public static void main(String[] args) {
        Integer[] numArray1 = {1,2,3,4,5};
        Double[] numArray2 = {1.0, 2.0, 3.0 , 4.0 , 5.0 };
        Calculate<Integer> obj = new Calculate<>(numArray1);
        Calculate<Double > obj2 = new Calculate<>(numArray2);
        System.out.println( obj.sameAvg(obj2));
    }

    //定义泛型类,使用数组存储各种数字类型的数据,提供一个方法计算数组中数据的平均值,
    static class Calculate<S extends Number>{
        S [] array;
        public Calculate(S[] array) {
            this.array = array;
        }
        public double avg(){
            double sum = 0 ;
            for (int i = 0; i < array.length; i++) {
                sum += array[i].doubleValue();
            }
            System.out.println("数组元素平均值为:" + sum/array.length);
            return  sum/array.length;   //返回平均值
        }

        //方法参数可以使用通配符类型表示可以是任意类型
        public boolean sameAvg(Calculate<?>  another){  //方法形参虽然是Calculate<?>通配符类型,但是通配符不影响创建什么类型的Calculate对象, 创建Calculate对象由声明的<T extends Number>决定
            return this.avg() == another.avg();
        }
    }
}
